package models

import (
	"errors"
	"fmt"
	"ginclassmates/utils"
	"time"

	"github.com/go-redis/redis"
)

var RedisClient *redis.Client

// 判断redis是否连接上了
func InitializeRedis() (err error) {
	RedisClient = redis.NewClient(&redis.Options{
		Addr:     utils.Redisaddr,
		Password: utils.Redispasswd, // 如果没有设置密码则为空字符串
		DB:       utils.RedisDB,     // 使用默认的数据库
		PoolSize: 100,
	})
	_, err = RedisClient.Ping().Result()
	if err != nil {
		return err
	}
	return nil
}

// 将从数据库读取的数据存入内存中redis
// 我们需要的是存放姓名和IP和学号
func Redisread(v ReadUser) {
	//student, _ := json.Marshal(v)
	//以学号为主键存入redis中
	err := RedisClient.Set(v.Number, v.Name, 24*time.Hour).Err()
	if err != nil {
		fmt.Println("学号为：", v.Number, "的同学信息存入出错！，err:", err)
	}
}

// 传递一个参数判断内存中是否存在
func JudgmentNumber(number, name string) (err error) {
	data, err := RedisClient.Get(number).Result()
	if err != nil {
		return err
	}
	if data != name {
		return errors.New("签到该学生的姓名不正确！")
	}
	return
}

// 获取一个订阅器
func RedisSubscribe(number string) *redis.PubSub {
	return RedisClient.Subscribe(number)
}

// 将处理的结果消息发送到订阅中
func RedisPublish(number string, message interface{}) (err error) {
	err = RedisClient.Publish(number, message).Err()
	if err != nil {
		return err
	}
	return nil
}
